//[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
/**
 *
 *	@file		imc_bg.h
 *	@brief		BG管理システム
 *	@author		tomoya takahashi
 *	@data		2005.09.29
 *
 */
//]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
#ifndef __IMC_BG_H__
#define __IMC_BG_H__

#include <nnsys.h>
#include "bg_system.h"

#undef GLOBAL
#ifdef	__IMC_BG_H_GLOBAL
#define	GLOBAL	/* */
#else
#define	GLOBAL	extern
#endif

//-----------------------------------------------------------------------------
/**
 *					定数宣言
*/
//-----------------------------------------------------------------------------
#define IMC_BG_SCR_OFS	(128)	// スクロールキャラクタオフセット
#define IMC_BG_SCR_PLTT_OFS	(0x5)	// スクロールパレットオフセット
#define IMC_BG_SCR_MAT_SX	(0)		// スクロールスクリーン配置位置
#define IMC_BG_SCR_MAT_SY	(0)		// スクロールスクリーン配置位置

//-----------------------------------------------------------------------------
/**
 *					構造体宣言
*/
//-----------------------------------------------------------------------------
//-------------------------------------
//
//	BGデータ構造体
//
//=====================================
typedef struct {
	GF_BGL_INI* bg_ini;

	int arc_file;		// アーカイブファイルナンバー
	int scrn_arc;		// スクリーンデータインデックス

	int x;			// スクリーン貼り付けキャラクタオフセット
	int y;			// スクリーン貼り付けキャラクタオフセット
	int width_char;	// 幅	キャラクタ単位
	int height_char;// 高さ	キャラクタ単位
	int frame;		// BGフレーム
	int pltt_offs;	// パレットオフセット（番号）
	int pltt_num;	// パレット本数
	int char_offs;	// キャラクタオフセット	(キャラクタ単位)
} IMC_BG;

//-------------------------------------
//
//	登録データ
//
//=====================================
typedef struct {
	GF_BGL_INI* bg_ini;

	int arc_file;		// アーカイブファイルナンバー
	int char_arc;		// キャラクタデータインデックス
	int pltt_arc;		// パレットデータインデックス
	int scrn_arc;		// スクリーンデータインデックス

	int x;		// 座標	(0~255)
	int y;		// 座標	(0~255)
	int frame;	// BGフレーム
	int pltt_num;	// 転送パレット本数
	int pltt_offs;	// パレットオフセット（番号）
	int char_offs;	// キャラクタオフセット

	int heap;			// 使用するヒープ
} IMC_BG_ADD;

//-------------------------------------
//
//	BGアニメ構造体
//
//=====================================
typedef struct {
	const IMC_BG*		bg;		// bgデータ
	int scrn_arc01;		// スクリーンデータインデックス
	int timing;			// 変更タイミング
	int	count;			// タウンタ
	int scrn_no;		// 今のスクリーンNo
	int heap;			// 使用するヒープ
} IMC_BG_ANM;

//-------------------------------------
//
//	BGアニメ初期化データ構造体
//
//=====================================
typedef struct {
	const IMC_BG*		bg;			// bgデータ
	int			scrn_arc;	// 2フレーム目のBG
	int			timing;		// 変更タイミング
	int			heap;
} IMC_BG_ANM_INIT;




//-----------------------------------------------------------------------------
/**
 *					プロトタイプ宣言
*/
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/**
 *
 *	@brief	BGデータの登録 & 新規変更
 *
 *	@param	obj		BGオブジェ
 *	@param	add		登録データ
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_BG_MakaObj( IMC_BG* obj, IMC_BG_ADD* add );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	BGデータの破棄
 *
 *	@param	obj		BGオブジェ
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_BG_DeleteObj( IMC_BG* obj );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	BGアニメーション初期化
 *
 *	@param	anm		アニメBGデータ格納先
 *	@param	init	初期化データ
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_BG_AnmInit( IMC_BG_ANM* anm, IMC_BG_ANM_INIT* init );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	アニメーション更新
 *
 *	@param	anm		アニメーションBG
 *	@param	frame	進めるフレーム値
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_BG_Anm( IMC_BG_ANM* anm, int frame );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	BGアニメを終了させる
 *
 *	@param	anm		アニメーションBG
 *
 *	@return	none
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_BG_AnmDelete( IMC_BG_ANM* anm );

//----------------------------------------------------------------------------
/**
 *
 *	@brief	BGをScrollさせます。
 *
 *	@param	obj		今表示しているBG
 *	@param	scr_bg	スクロール先BG
 *	@param	scr_x	スクロールさせるｘ値
 *	@param	scr_y	スクロールさせるｙ値
 *	@param	scr_syncスクロールに使うシンク数
 *	@param	end_flg	終了検知フラグ
 *
 *	@return	none
 *
 * 最終的にはscr_bgの方のBGが画面に出るようになります
 *
 * またBGデータ配置が
 * 256x256で
 * した128~255の部分にキャラクタがあるようになっている必要があります。
 *
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void IMC_BG_ScrollReq( IMC_BG* obj, IMC_BG_ADD* scr_bg, int scr_x, int scr_y, int scr_sync, BOOL* end_flg );

#undef	GLOBAL
#endif		// __IMC_BG_H__
